#ifndef _RES_H_
#define _RES_H_

#include <stdio.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdbool.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/select.h>
#include <signal.h>
#include <sys/epoll.h>
#include <sqlite3.h>

typedef struct hostAddr
{
    char ip[16];         // 字符串IP
    unsigned short port; // 端口号
} HOSTADDR;

typedef struct // 注册结构体(顾客，商家，骑手都可注册)
{
    char name[50];
    char pwd[50];
    char phone[20];
    char address[100];
} RGU;

typedef struct //菜单表中的项
{
    int orderID;
    char shoreID[50];
    char dishName[50];
    char NewDishName[50];
    double Price;
    int Sales;
    char ClientName[50];
    char ClientPhone[20];
    char ClientAddress[100];
    char OrderState[50];
    char Time[50];
}MENU;

typedef struct
{
    char dishName[20];
    double price;
    int sales;
}COMMODITY;


// 枚举
typedef enum
{
    Login,
    Register,
    AddDish,
    DeleteDish,
    ModifyDish,
    ShowDish,
    ViewMerchant,
    SelectMerchant,
    OrderMeals,
    ViewOrderStates,
    CheckOrder,
    DealOrder,
    OrderCompleted,
    ViewOrderHistory,
    receiveOrder,
    DeliveryCompleted,
    WithMerchantPrivateChat,
    WithClientPrivateChat,
    UserOpensChat,
    UserCloseChat,
    MerchantOpensChat,
    MerchantCloseChat,
    FindSelfChats,
    Chat,
    groupChat,
    singleChat,
    addFriend,
    quit,
    ok,
    no,
    queryChatRec,
    queryOver,
    postMessage,   // 发帖
    showInvitation // 显示论坛中的帖子
} CLIENT_MSG_TYPE;

typedef enum
{
    client,
    merchant,
    rider
}IDENTITY;

typedef struct msg
{
    IDENTITY identity;

    CLIENT_MSG_TYPE type;  // 消息类型

    char buf[1016]; // 消息的内容
} MSG;

//orderID, clientName, storeName, dishName, amount, totalPrice, orderState
typedef struct 
{
    int orderID;
    char clientName[50];
    char storeName[50];
    char dishName[50];
    int amount;
    double totalPrice;
    char orderState[50];
    char orderTime[50];
    char clientPhone[20];
    char clientAddress[100];
}ORDER_INFOR;

// 登录信息
typedef struct
{
    char name[128]; // 用户名
    int fd;         // 用户套接字，如果是TCP这里应该用户的套接字
    bool bo;    //聊天是否在线，这里默认为聊天不在线
}LOGIN_INFO;


typedef struct // 论坛帖子的结构体
{
    int id;
    char text[500];
    char name[128];
    char time[32];
} INVIT;

// 私聊的结构体
typedef struct
{
    char identityTYPE[20];//对方的身份 
    char selfName[128]; // 自己的名字
    char destName[128]; // 对方的名字
    char text[500];     // 聊天的内容
    int row;
    int col;
    char time[30];           // 聊天的时间
} SINGLE_CHAT;

typedef struct queryResult
{
    char **pzResult; // 查询结果的指针
    int row;         // 查询到的数据的行数
    int col;         // 查询到的数据的列数
} QUREY_RST;

// 把网络的地址结构体转为本地用户能够识别的地址
HOSTADDR convertNetToHost(struct sockaddr_in addr);

#endif